package Logica_Moviemientos;

import javax.swing.ImageIcon;

import Mapa.*;
import Personajes.*;
import TDA_Lista.Position;
public class Inteligencia_Manual extends Inteligencia{
	protected Mario p;

	/**Constructor. */
	public Inteligencia_Manual(Mapa_Logico map){
		super(map);
		p = mapa.obtenerMario();
		
	}
	
	/**Mueve el personaje logico hacia la izquierda. */
	public void moverIzquierda(){
		Manejo_Colisiones c = mapa.getColisiones();
		if(!c.colisionAIzquierda(p)){	
			if(p.obtenerX() > mapa.getPosicionX1()){
				Enemigo e = c.colisionLateralMyE();
				if(e != null) p.powerDOWN(e);
				else p.setPosicion(p.obtenerX() - 2, p.obtenerY());
			}
		}
	}
	
	/**Mueve el personaje logico hacia la derecha. */
	public void moverDerecha(){
		Manejo_Colisiones c = mapa.getColisiones();
		if(!c.colisionADerecha(p)){
			Enemigo e = c.colisionLateralMyE();
			if(e != null) p.powerDOWN(e);
			else{
				p.setPosicion(p.obtenerX() + 2, p.obtenerY());
				if(mapa.getPosicionX2() - p.obtenerX() < 600){
					mapa.setPosicionX1(mapa.getPosicionX1() + 2);
					mapa.setPosicionX2(mapa.getPosicionX2() + 2);
				}
			}	
		}
	}
	
	/**Hace saltar al personaje. */
	public void saltar(){
		Manejo_Colisiones c = mapa.getColisiones();
		if(c.colisionAbajo(p)){
			mapa.setGravedad(false);
			//Subiendo
			for( int i = 0; i < 44; i++){
				try	{
					//Si no hay obstaculo el personaje puede subir
					if(!c.colisionArriba(p)){
						if(p.getDerecha()){
							if(!c.colisionADerecha(p)){
								Enemigo e = c.colisionLateralMyE();
								if(e != null){
									p.powerDOWN(e);
									break;
								}
								p.setPosicion(p.obtenerX() + 2, p.obtenerY() - 4);;
								if(mapa.getPosicionX2() - p.obtenerX() < 600){
									mapa.setPosicionX1(mapa.getPosicionX1() + 2);
									mapa.setPosicionX2(mapa.getPosicionX2() + 2);
								}
							}else p.setPosicion(p.obtenerX(), p.obtenerY() - 4);
						}
						else if(p.getIzquierda()){
							if(!c.colisionAIzquierda(p)){
								Enemigo en = c.colisionLateralMyE();
								if(en != null)	{
									mapa.obtenerMario().powerDOWN(en);
									break;
								}
								else{
									en = c.colisionArribaMyE();
									if(en != null){
										mapa.obtenerMario().powerDOWN(en);
										break;
									}
								}
								if(p.obtenerX() > mapa.getPosicionX1()){
									p.setPosicion(p.obtenerX() - 2, p.obtenerY() - 4);
								}
								else p.setPosicion(p.obtenerX(), p.obtenerY() - 4);;
							}
							else p.setPosicion(p.obtenerX(), p.obtenerY() - 4);
						}	
						else{
							Enemigo en = c.colisionArribaMyE();
							if(en != null){
								mapa.obtenerMario().powerDOWN(en);	
								break;
							}
							p.setPosicion(p.obtenerX(), p.obtenerY() - 4);
						}
						Thread.sleep(10);
					}
				} catch (Exception e) {
					System.out.println("Salto :: Run() "+e);
				}
			}
			mapa.setGravedad(true);
		}
	}
	
	public void dispararBombaNuclear() {
		if(p.getBombaNuclear()){
			for(Enemigo e : mapa.obtenerEnemigos()){
				if((e.obtenerX() >= mapa.getPosicionX1() - 32)&&(e.obtenerX() <= mapa.getPosicionX2())){
					e.setSentido(0);
					e.setPosicion(e.obtenerX(),e.obtenerY() - 32);
					e.getRG().modificarImagen(new ImageIcon(getClass().getResource("/Imagenes/Objetos/bomba.gif")));
				}
			}
			try {
				Thread.sleep(700);
			} catch (InterruptedException e1) {}
			for(Enemigo e : mapa.obtenerEnemigos()){
				if((e.obtenerX() >= mapa.getPosicionX1() - 32)&&(e.obtenerX() <= mapa.getPosicionX2())){
					e.setMurio(true);
				}
			}
			
			p.setPuntaje(-45);
			p.setBombaNuclear(false);
		}
		
	}
	
}
